package com.ang.springboot.consumer.helloword;

import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author ssang
 * @date 2022-04-09 21:26
 *
 * RabbitListener和RabbitHandler配合使用时，@RabbitHandler注解加上默认参数：isDefault = true；否则在可视化界面直接往queue发送消息时，会循环报错
 * 解决方法如下：
 *      1：直接将RabbitListener注解用在方法上
 *      2：将RabbitListener注解用在类上，使用RabbitHandler时，加上isDefault = true
 *      3：在界面发送消息时，在properties上，添加content_type：text，此时RabbitHandler所在方法接受的是String；更多对应关系，可百度
 *
 * 上面报错分析：
 * 1：如果通过客户端（可视化界面）放入队列中有个content_type为空的的消息，RabbitListener只有形参为String的Handler，是无法对应上消费实现的。
 * 2：消费者找不到任何一个消费实现，就回去找isDefault = true 的 handler，类似一个兜底策略。
 * 所以在使用RabbitHandler时，加上isDefault = true
 */
@Component
@RabbitListener(queuesToDeclare = @Queue("helloQueue"))
public class HelloConsumer {
    @RabbitHandler(isDefault = true)
    public void getMessage(String msg){
        System.out.println("队列：helloQueue；获取到消息:"+msg);
    }
}
